var finTitreFormulaire;
var classeAction;
var classeViewHelper;

//ENTITE
function annuler(idForm) { 
	disableAllButton(idForm);
	$.post('/outils/forwarder/Forwarder.php', { className: classeAction, cmd: "annuler" }, function(data) { 
		retour = JSON.parse(data);
		if (retour.succes) {
			if (mode != modeTransition) {
				changerMode(idForm, modeAjout);
			}
		} else {
			$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
			//$('#resultat').html(retour.detail);
		}
	});
}

function ajouter(idForm) {
	$("#" + idForm).each(function(i){
		this.reset();
	});
	$.post('/outils/forwarder/Forwarder.php', { className: classeAction, cmd: "ajouter" }, function(data) { 
		var retour = JSON.parse(data);
		if (retour.succes) {
			mode=modeAjout;
			setEtatInterfaceModeAjout(idForm);
			setTitreFormulaire(idForm);
			
			if (onAjout != null) {
				onAjout(idForm);
			}
		} else {
			$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
			//$('#resultat').html(retour.detail);
		}
	});
}

function modifier(idForm, id) {
	var retour;
	$.post('/outils/forwarder/Forwarder.php', { className: classeAction, cmd: "modifier", id: id}, function(data) {
		retour = JSON.parse(data);
		if (retour.succes) {
			for(var key in retour){
				if (key != 'succes') {
					var valeur = retour[key];
					//TODO associer chaque champ à un nom d'attribut plutôt
					//var champ = $("#champ_formulaire_" + key);
					var champ = $("form[id="+idForm+"]").find("#champ_formulaire_" + key);
					champ.html(retour.detail);
					if (champ.attr("type") == "checkbox") {
						if (valeur == "1") {
							champ.attr("checked", "checked");
						} else {
							champ.removeAttr("checked", "");
						}
					} else {
						champ.val(valeur);
					}
				}
			}
			
			setEtatInterfaceModeModification(idForm, id);
			mode=modeModification;
			setTitreFormulaire(idForm);
			if (onModification != null) {
				onModification(idForm);
			}
		} else {
			$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
			//$('#resultat').html(retour.detail);
		}
	});
}

function supprimer(idForm, id, entitePresentation) {
	if (!confirm('Voulez vous vraiment supprimer "' + entitePresentation + '"')) {
		return;
	}
	disableAllButton();
	
	var retour;
	$.post('/outils/forwarder/Forwarder.php', { className: classeAction, cmd: "supprimer", id: id}, function(data) { 
		retour = JSON.parse(data);
		$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
		//$('#resultat').html(retour.detail);
		if (retour.succes) {
			$.ajaxSetup({async:false});
			displayListe(idForm);
			$.ajaxSetup({async:true});
		}
		if (mode==modeAjout) {
			setEtatInterfaceModeAjout(idForm);
		} else {
			$.post('/outils/forwarder/Forwarder.php', {className: classeAction, cmd: "getIdModifie"}, function(dataID) {
				var retourID = JSON.parse(dataID);
				if (retourID.succes) {
					setEtatInterfaceModeModification(idForm,retourID.id);
				} else {
					//$('#resultat').html(retourID.detail);
					$("form[id="+idForm+"]").find("#resultat").html(retourID.detail);
				}
			});
		}
	});
}

function valider(idForm) {
	$.ajaxSetup({async:false});
	disableAllButton(idForm);
	
	var parametres = { className: classeAction, cmd: "valider"};
	var prefixeChampFormulaire = "champ_formulaire_";
	$("form[id="+idForm+"]").find(":input[id*=" + prefixeChampFormulaire + "]").each(function(i) {
		var nomChamp = this.id.substring (prefixeChampFormulaire.length);
		var value = this.value;
		if (this.type == "checkbox") {
			parametres[nomChamp] = this.checked;
		} else {
			parametres[nomChamp] = this.value;
		}
	});
	
	var retour;
	$.post('/outils/forwarder/Forwarder.php', parametres, function(data) { 
		retour = JSON.parse(data);
	});
	//$('#resultat').html(retour.detail);
	$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
	if (retour.succes) {
		displayListe(idForm);
		changerMode(idForm,modeAjout);
	} else {
		if (mode==modeAjout) {
			setEtatInterfaceModeAjout(idForm);
		} else {
			$.post('/outils/forwarder/Forwarder.php', {className: classeAction, cmd: "getIdModifie"}, function(dataID) {
				var retourID = JSON.parse(dataID);
				if (retourID.succes) {
					setEtatInterfaceModeModification(idForm,retourID.id);
				} else {
					//$('#resultat').html(retourID.detail);
					$("form[id="+idForm+"]").find("#resultat").html(retourID.detail);
				}
			});
		}
	}
	$.ajaxSetup({async:true});
	return retour.succes;
}

//UTILITAIRE
var modeNonDefini='modeNonDefini';
var modeAjout='modeAjout';
var modeModification='modeModification';
var modeTransition='modeTransition';
var mode = modeNonDefini;
function disableAllButton(idForm) {
	$("form[id="+idForm+"]").find("button").attr('disabled', true);
}

function setEtatInterfaceModeModification(idForm,id) {
	$("form[id="+idForm+"]").find("button").attr('disabled', false);
	$("form[id="+idForm+"]").find("button[id*=_" + id + "]").attr('disabled', true);
}

function setEtatInterfaceModeAjout(idForm) {
	$("form[id="+idForm+"]").find("button").not('#bouton_formulaire_annulation').attr('disabled', false);
	$("form[id="+idForm+"]").find("#bouton_formulaire_annulation").attr('disabled', true);
}

function setTitreFormulaire(idForm) {
	if (mode == modeAjout) {
		$("form[id="+idForm+"]").find('#titreFormulaire').html($("form[id="+idForm+"]").attr("titreajout") + ':');
	} else if (mode == modeModification) {
		$("form[id="+idForm+"]").find('#titreFormulaire').html($("form[id="+idForm+"]").attr("titremodification") + ':');
	} else {
		$("form[id="+idForm+"]").find('#titreFormulaire').html("{MODE INCONNU}");
	}
}

function charger(page, parametre) {
	$.ajaxSetup({async:true});
	$("button[id*=bouton_formulaire_]").attr('disabled', true);
	afficherChargementDans("contenu");
	$.post(page, {parametre : parametre}, function(data) { 
		$('#contenu').html(data); 
		addClickHandlers();
		
		$("button[id*=bouton_formulaire_]").attr('disabled', false);
		$("form").each(function(i) {
			var idForm = this.id; 
			//passage en mode synchrone pour que la liste ne s'affiche pas avant que 
			//le mode ajout soit fini
			$.ajaxSetup({async:false});
			changerMode(idForm, modeAjout);
			$.ajaxSetup({async:true});
			displayListe(idForm);
		});
	}); 
}

function chargerSimple(page, parametre) {
	$("button[id*=bouton_admin_section]").attr('disabled', true);
	afficherChargementDans("contenu");
	$.post(page, {parametre : parametre}, function(data) { 
		$('#contenu').html(data); 
		addClickHandlers();
		$("button[id*=bouton_admin_section]").attr('disabled', false);
	}); 
}

function displayListe(idForm) {
	$.post('/outils/forwarder/Forwarder.php', { className: classeViewHelper, cmd: "afficherListeAvecModif" }, function(data) {
		var idListe = $("form[id="+idForm+"]").attr('listeLiee');
		$('#'+idListe).html(data); 
		addClickHandlers();
	});
}

function changerMode(idForm, nouveauMode, id) {
	mode = modeTransition;
	disableAllButton(idForm);

	//annulation de l'ajout/modif en cours
	$.ajaxSetup({async:false});
	annuler(idForm);
	$.ajaxSetup({async:true});
	
	if (nouveauMode == modeModification) {
		modifier(idForm, id);
	} else if (nouveauMode == modeAjout) {
		ajouter(idForm);
	}
}
